package com.etime.shyauth.services.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.etime.shyauth.dao.SysRoleRightMapper;
import com.etime.shyauth.dto.SysRoleRightDto;
import com.etime.shyauth.pojo.SysRoleRight;
import com.etime.shyauth.services.interfaces.SysRoleRightService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;

/**
 * 角色权限分配service层实现类
 */
@Service
public class SysRoleRightServiceImpl implements SysRoleRightService {

    @Autowired
    private SysRoleRightMapper mapper;

    /**
     * 保存角色权限
     * 保存角色权限时，会先根据角色id删除该角色的所有权限数据，然后再
     * 保存新的权限数据
     *
     * @param roleid 角色id
     * @param funids 角色所能使用的功能id集合
     * @return 全部保存成功则返回1，否则返回0
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int saveRoleRight(int roleid, List<Integer> funids) throws Exception {
        //删除指定角色的现有权限数据
        QueryWrapper<SysRoleRight> wrapper = new QueryWrapper();
        wrapper.eq("roleid", roleid);
        mapper.delete(wrapper);
        int rtn = 1;
        //添加新的权限数据
        for (Integer funid : funids) {
            SysRoleRight roleRight = new SysRoleRight();
            roleRight.setFunid(funid);
            roleRight.setRoleid(roleid);
            rtn = mapper.insert(roleRight);
            if(rtn>0){
                continue;
            }else{
                rtn = 0;
                throw new Exception("插入数据出错,funid="+funid);
            }
        }
        return rtn;
    }

    /**
     * 查询角色权限，用于初始化角色权限分配页面
     *
     * @param roleid 角色id
     * @return 色所能使用的功能；rrid=null表示该角色没有此权限
     */
    @Override
    public List<SysRoleRightDto> selectSysRoleRgihtDtoList(int roleid) {
        return mapper.selectRoleRight(roleid);
    }
}
